import { getToken, setToken, removeToken } from '@/utils/auth'
import { getLoginDate, getUserInfo } from '@/api/user.js'
import { constantRoutes } from '@/router'
import { resetRouter } from '@/router'
const state = {
  token: getToken() || '', // 默认token为空字符串
  userInfo: {}, // 存储用户基本资料状态，默认为空对象
  routes: constantRoutes // 静态路由和过滤路由组成的路由数组
}

const mutations = {
  setToken(state, token) {
    // 更新Vuex中的token
    state.token = token
    // 持久化token到本地缓存中
    setToken(token)
  },
  removeTokenMt(state) {
    // 删除Vuex中的token
    state.token = null
    // 删除本地缓存中的token
    removeToken()
  },
  getUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  setRoutes(state, newRoutes) {
    state.routes = [...constantRoutes, ...newRoutes] // 合并路由数组 =>静态路由 + 动态路由
  }
}

const actions = {
  // 登录逻辑
  async LoginAction({ commit }, data) {
    const token = await getLoginDate(data)
    // 提交mutation，更新token
    commit('setToken', token)
  },
  // 获取用户信息
  async getUserInfoAction({ commit }) {
    const res = await getUserInfo()
    commit('getUserInfo', res)
    return res // 返回用户信息，便于在其他地方使用
  },
  // 退出登录
  logoutAction({ commit }) {
    commit('removeTokenMt') // 删除token
    commit('getUserInfo', {}) // 清空用户信息，重置为空对象
    // 重置路由
    resetRouter()
  }
}

export default {
  state,
  mutations,
  actions,
  namespaced: true // 开启命名空间
}
